import Request from '@/js_sdk/luch-request/luch-request/index.js'
import {
	testEncr
} from "@/utils/encrypt.js"
import store from "@/store/index.js"
const http = new Request({
	baseURL: 'https://api.hongapps.com/', //公共域名
	timeout: 60000
})
// 初始化请求配置
http.setConfig((defaultConfig) => {
	defaultConfig.header = {
		"Content-Type": "application/json; charset=UTF-8",
	}
	return defaultConfig
})
// 请求拦截
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	const token = uni.getStorageSync('token')
	const ts = Date.now(); // 获取当前时间戳
	const nonceStr = "9CDzAHOnIiUyyeyC2ZYqsD1aQrjfB6ie";
	config.data = config.data || {}

	const signature = testEncr(JSON.stringify(config.data), ts, nonceStr)
	config.header['nonce-str'] = nonceStr
	config.header['request-time'] = ts
	config.header.Authorization = signature
	if (token) {
		config.header['user-token'] = token
	}
	// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
	return config
}, config => {
	return Promise.reject(config)
})

// 响应拦截
http.interceptors.response.use((response) => {
	/* 对响应成功做点什么 可使用async await 做异步操作*/
	const {
		code,
		msg,
	} = response.data.head

	if (code !== "0000") {
		var message = msg;

		if (code === undefined) {
			// 后台直接报错
			message = "网络较差，请稍后再试";
		}

		// token不存在或失效
		if (code === "0002") {
			console.log('0002');
			uni.showToast({
				title: "网络较差，请稍后再试",
				icon: "error"
			})
			store.dispatch('loginAction').then(() => {
				uni.$emit('refreshData')
			})
		}
	} else {}

	return response.data === undefined ? {} : response.data
}, (error) => {
	// console.log('response error', error);
	// 对响应错误做点什么 （statusCode !== 200）
	if (error) {
		const {
			errNo: status
		} = error
		switch (status) {
			case "0002":
				uni.showToast({
					title: "网络较差，请稍后再试",
					icon: "error"
				})
				store.dispatch('loginAction').then(() => {
					uni.$emit('refreshData')
				})
				setTimeout(() => {
					uni.switchTab({
						url: '/pages/index/index'
					})
				}, 2000)
				break;
			case 403:
				uni.showToast({
					title: "没有权限，请联系管理员",
					icon: 'none'
				})
				break;
			case 404:
				uni.showToast({
					title: "请求资源不存在",
					icon: 'none'
				})
				break
			default:
				uni.showToast({
					title: "网络较差，请稍后再试",
					icon: 'none'
				})
				break;
		}
	} else if (error.request) {
		// 请求发出去但是没有收到服务器的返回信息
		console.log('未收到服务器的返回信息', error.request)
	} else {
		// 设置的请求参数发生了错误
		console.log('请求参数发生了错误', error.errMsg)
	}
	return Promise.reject(error)
})

export default http